home *** CD-ROM | disk | FTP | other *** search
- ;vmrio/asm - 2/27/84 - jwk
- COM '<Copyright 1983 by Jim Kyle>'
- COM '<All Rights Reserved>'
- ;sec_seek(fp,sec) FILE *fp; int sec;
- SEC_SEEK
- $GA HL,BC ;recover arg values (LC macro)
- LD E,(HL)
- INC HL
- LD D,(HL)
- INC DE ;to FCB itself
- IF @_MODEL.EQ.4
- LD A,66 ;svc
- RST 40
- ELSE
- CALL 4442H ;DOS @POSN routine
- ENDIF
- LD HL,0 ;return OK if no err
- RET Z
- CP 28 ;end of file?
- RET Z
- CP 29 ;past end of file?
- RET Z
- CALL @ERRET ;else report error
- LD HL,-2 ;and return ERR
- RET
- ;--end of module
- *M
- ;fread(fp,bfr,n) FILE *fp; char *bfr; int n;
- FREAD
- $GA HL,DE,BC ;get args (LC macro)
- CALL @GINT ;get LC FCB adr into HL
- INC HL ;to FCB
- EX DE,HL ;HL=buf, DE=fcb, BC=n
- INC BC ;because of decr in test
- PUSH BC ;to stack
- LD BC,0 ;actual char count
- JR $?3
- $?1 EX (SP),HL
- IF @_MODEL.EQ.4
- LD A,3 ;svc
- RST 40
- ELSE
- CALL 0013H ;DOS @GET routine
- ENDIF
- JR Z,$?2
- LD BC,-1 ;error return value
- JR $?4
- $?2 LD (HL),A
- INC HL
- INC BC ;the count
- $?3 EX (SP),HL ;swap 'n' and 'buf'
- DEC HL
- LD A,H
- OR L
- JR NZ,$?1 ;not done yet
- $?4 POP HL ;clean up stack
- LD H,B
- LD L,C ;count of actual transfer
- RET
- ;--end of module--
- *M
- ;fwrite(fp,bfr,n) FILE *fp; char *bfr; int n;
- FWRITE
- $GA HL,DE,BC
- CALL @GINT ;get LC FCB adr into HL
- INC HL ;to true FCB adr
- EX DE,HL ;HL=buf, DE=fcb, BC=n
- INC BC ;because of decr in test
- PUSH BC ;to stack
- LD BC,0 ;actual char count
- JR $?2
- $?1 EX (SP),HL ;get buf adr back into HL
- LD A,(HL)
- INC HL
- IF @_MODEL.EQ.4
- PUSH BC
- LD C,A
- LD A,4 ;svc
- RST 40
- POP BC
- ELSE
- CALL 001BH ;DOS @PUT routine
- ENDIF
- JR NZ,$?3 ;in case of any error
- INC BC ;the count
- $?2 EX (SP),HL ;swap 'n' and 'buf'
- DEC HL
- LD A,H
- OR L
- JR NZ,$?1 ;not done yet
- $?3 POP HL ;clean up stack
- LD H,B
- LD L,C ;count of actual transfer
- RET
- ;--end of module--
-